<?php
namespace App\Controllers;

use Framework\Database;
use Framework\Validation;
use Framework\Session;

class UserController{
    protected $db;

    public function __construct()
    {
        $config = require basePath('config/db.php');
        $this->db = new Database($config);
    }

    public function login()
    {
        loadView('users/login');
    }

    public function create()
    {
        loadView('users/create');
    }

   
    
    public function store() 
    {

    $name = $_POST['name'];
    $email = $_POST['email'];
    $city = $_POST['city'];
    $province = $_POST['province'];
    $password = $_POST['password'];
    $passwordConfirmation = $_POST['password_confirmation'];

    
    $errors = [];
    
    if (!Validation::email($email)) {
        $errors['email'] = '请输入一个合法的电子邮箱地址';
    }

    if (!Validation::string($name, 2, 50)) {
        $errors['name'] = '姓名长度为2到50字符之间';
    }

    if (!Validation::string($password, 6, 50)) {
        $errors['password'] = '密码长度至少为6位';
    }
    
    
    if (!Validation::match($password, $passwordConfirmation)) {
        $errors['password_confirmation'] = '两次的输入密码不一致';
    }


    if (!empty($errors)) {
        
        
        loadView('users/create', [
                 'errors' => $errors,
                 'user' =>[
                     'name' => $name,
                     'email' => $email,
                     'city' => $city,
                     'province' => $province,
                    ]
                 ]);
        
        exit;
    } else {
        
        $params = [
            'email' => $email 
        ];

        
        $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();

        
        if ($user) {
            $errors['email'] = '该邮箱已注册！'; 
            loadView('users/create', [
                'errors' => $errors
            ]);
           
            exit;
        }


        $params = [
            'name' => $name, 
            'email' => $email, 
            'city' => $city, 
            'province' => $province, 
            'password' => password_hash($password, PASSWORD_DEFAULT) 
        ];


        $this->db->query('INSERT INTO users (name, email, city, province, password) VALUES (:name, :email, :city, :province, :password)', $params);

        $userId = $this->db->conn->lastInsertId();

        Session::set('user',[
            'id' => $userId,
            'name' => $name,
            'email' => $email,
            'city' => $city,
            'province' => $province
        ]);

       
        redirect("/");

        
    }
}

public function logout()
{
   
    Session::clearAll();

   
    $params = session_get_cookie_params();

    
    setcookie('PHPSESSID', '', time() - 86400, $params['path'], $params['domain']);
    
    redirect("/");
}

public function authenticate()
{
    
    $email = $_POST['email'];
    $password = $_POST['password'];

    $errors = [];

    
    if (!Validation::email($email)) {
        $errors['email'] = '请输入合法的邮箱地址！';
    }
    
    if (!Validation::string($password, 6, 20)) {
        $errors['password'] = '密码为至少6位字符！';
    }
    
    if (!empty($errors)) {
        loadView('users/login', [
            "errors" => $errors
        ]);
        exit;
    }

    
    $params = [
        'email' => $email
    ];

    
    $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();
    
    if (!$user) {
        $errors['email'] = '用户不存在或密码错误！';
        loadView('users/login', [
            'errors' => $errors
        ]);
        exit;
    }
   
    if (!password_verify($password, $user->password)) {
        $errors['email'] = '用户不存在或密码错误！';
        loadView('users/login', [
            "errors" => $errors
        ]);
        exit;
    }
    
    Session::set('user', [
        "id" => $user->id,
        'name' => $user->name,
        "email" => $user->email,
        'city' => $user->city,
        'province' => $user->province
    ]);
    
    redirect('/');
}


}